在理解了SSL與TLS協定的基本架構後,接著可以來介紹HTTPS,在進入HTTPS之前,我們先簡單了解一下HTTP。
HTTP(HyperText Transfer Protocol,超文字傳輸協定)
是網際網路上最常用的協定之一,負責在客戶端(例如瀏覽器)與伺服器之間傳輸資料,包括文字、圖像、音訊、影片等。HTTP協定的作用在於統一了客戶端和伺服器之間的通訊格式。它為OSI模型的最上層(應用層)協定,專門用來處理網頁的請求與回應。當我們在瀏覽器中輸入網址並按下 Enter 鍵時,瀏覽器會透過 HTTP 協定向伺服器發送請求,然後將伺服器回應的內容呈現在瀏覽器上。
然而,HTTP本身並不具備安全性。因為傳輸的資料是以明文方式進行的,容易被攔截或竄改。因此,為了增強安全性,HTTPS應運而生。HTTPS就是在HTTP協定的基礎上,加入了一層安全協定,這層安全保護機制就是SSL/TLS,能夠加密傳輸的資料,並確保通信的安全性。
換句話說,HTTPS其實是在HTTP協定的基礎上,加上了一層安全性協定,而這層協定就是上章節提到的SSL/TLS。這層安全機制能夠提供資料加密、伺服器認證,以及資料完整性驗證。因此,當你在瀏覽器網址列看到"https"時,代表你與該網站的通信是經過加密保護的,且該網站的身分已經過可信任的憑證授權機構(CA)核發的數位憑證認證。
HTTPS的運作是由後端伺服器實現的,因為SSL/TLS憑證需要安裝在伺服器上。當伺服器安裝並配置好憑證後,便會自動進行SSL/TLS握手過程,建立起安全的連線。在接下來的內容中,我們將探討HTTPS的運作方式,而HTTP的詳細格則會在下一個章節進行解說。
HTTPS的運作是由後端伺服器實現的。當伺服器安裝並配置好憑證後,便會自動進行SSL/TLS握手過程,建立起安全的連線。要建立起安全連線,需要有一個認證機制,而這個認證機制的內容來自於 憑證。那麼,憑證到底是什麼呢?
SSL/TLS憑證是一種數位憑證,用來驗證伺服器的身份,並加密網站與使用者之間的通信。這個憑證包含公開金鑰、伺服器的身分資訊(如網域名稱),以及憑證授權機構(CA)的數位簽章。當使用者連線到網站時,瀏覽器會檢查該憑證的真實性,確保網站身份合法。
數位憑證(SSL/TLS憑證)通常包含以下幾個主要內容:
如果你要看網站的憑證,使用Chrome打開瀏覽器,在此處點選已建立安全連線,接著就會跳出憑證有效的選項。
點選後就可以看到網站所用憑證相關訊息,如下圖為www.cloudflare.com
的 SSL/TLS 憑證資訊,包含核發對象、發行者(Google Trust Services)、有效期間(2024年9月6日到2024年12月5日),以及使用的加密演算法(SHA-256 和 ECDSA)。這憑證確保網站的通訊安全與加密。
數位憑證(SSL/TLS憑證)有多種類型,主要是根據其驗證方式和用途來分類。以下是常見的憑證類型:
https://myblog.com
),點擊鎖頭圖標只會顯示網站的 HTTPS,但不會顯示公司名稱。https://smallbiz.com
),當使用 OV 憑證時,瀏覽器會顯示鎖頭與 HTTPS,憑證詳細資訊中會有公司名稱和地址。https://www.paypal.com
)或大型電商網站(如 https://www.amazon.com
)時,瀏覽器的地址欄會顯示鎖頭,並且顯示企業名稱(如「PayPal, Inc.」)。https://example.com
、https://mail.example.com
、https://shop.example.com
都使用相同的憑證。https://site1.com
、https://site2.com
、https://site3.com
),可以使用同一張多域名憑證來保護這些不同的網站。https://localhost
)使用自簽憑證,這類網站在瀏覽器中會顯示「不安全」的警告,因為沒有經過第三方機構驗證。接下來解釋憑證如何在SSL/TLS交握時作用,以下引用Cloudflare 的圖片來解釋 SSL/TLS 握手的完整過程,從 TCP 連線建立到加密通信的開始。握手過程的每個步驟都關係到如何透過加密技術確保客戶端(Client)和伺服器(Server)之間的安全通信。以下是圖片的詳細解釋:
SYN 和 ACK:這是握手開始之前的步驟,屬於 TCP 的三次握手過程,用來建立基礎的連接。具體流程如下:
這個過程大約需要 50ms 左右,是建立基礎連接的步驟。
客戶端(Client)向伺服器發送 ClientHello 訊息,這個訊息包含:
這一步是握手過程的開始,告訴伺服器客戶端支持的加密協議。
伺服器收到 ClientHello 後,回應 ServerHello 訊息,包含:
憑證在此階段至關重要,因為客戶端需要通過憑證來驗證伺服器的身份。這確保客戶端連接到的是受信任的伺服器,而非惡意攻擊者。
客戶端在驗證伺服器憑證之後,進行 ClientKeyExchange:
接下來,雙方基於這個預主密鑰以及之前的隨機數據,生成對稱加密密鑰,用於後續的加密通信。在這一步,客戶端也會發送 ChangeCipherSpec 訊息,表示後續的通信將會使用新的加密算法和密鑰。
在了解完 SSL/TLS 握手中的憑證作用流程後,我們可以進一步使用ByteBytego這張圖來詳細解釋 HTTPS 的整體流程。這張圖非常直觀地展示了 HTTPS 如何通過非對稱加密與對稱加密的結合來保護資料傳輸的安全性。
TCP 握手階段 (TCP Handshake)
客戶端和伺服器進行 TCP 三次握手。客戶端發送 SYN,伺服器回應 SYN + ACK,然後客戶端再回應 ACK。這樣,TCP 連線就正式建立,為後續的 HTTPS 連線打好基礎。這個步驟確保雙方建立可靠的連接,所有數據都可以有序傳送。
憑證驗證 (Certificate Check)
密鑰交換 (Key Exchange)
數據傳輸 (Data Transmission)
Session Key 是用來加密 當次連線期間 的數據的對稱加密密鑰,通常以隨機生成的一串位元組(bytes)來表示,並根據加密演算法的不同有不同的長度和格式。例如十六進位表示的 Session Key(256 位 AES):
9f2c7b2df3120b4b4e5e4a08cf96324e5b8c9f68c9d5f8b7e4b2f3b123456789
在了解完 SSL/TLS 憑證的驗證流程後,接下來你可能會想知道:那麼憑證該如何申請呢?以下我們簡單介紹數位憑證的申請過程,以及選擇憑證授權機構(CA)的注意事項。
憑證授權機構(Certificate Authority,簡稱 CA)是專門負責發行數位憑證的受信第三方組織。數位憑證用來驗證網站或個人的身份,並提供公鑰,以確保資料能夠在網路上安全傳輸。申請數位憑證的過程通常包括以下幾個步驟:
申請證書:首先,你需要向 CA 提出申請,並提供相關的個人或組織資訊,以及你的公開金鑰。
驗證身份:接著,CA 會核實你提供的資訊。這可能包括確認你的身份、驗證你的組織是否合法,並檢查你是否擁有申請的網域。驗證過程的嚴格程度取決於你申請的憑證類型。舉例來說,如果你申請的是擴展驗證(Extended Validation,簡稱 EV)憑證,可能需要提供較多文件來證明身份與合法性。
簽署證書:一旦身份驗證完成,CA 會使用他們的私密金鑰來簽署你的公鑰和其他資訊,生成數位憑證。這個憑證將證明你的公鑰與身份資訊的關聯性,並且只要擁有 CA 的公開金鑰,任何人都可以驗證這個簽名的真實性。
許多網站伺服器軟體(例如 Apache、Nginx)以及雲端平台(如 AWS、Google Cloud)都提供工具來協助生成公私鑰對,並幫助完成憑證申請和安裝流程。
申請數位憑證通常需要支付費用,具體費用取決於選擇的 CA 和憑證的類型。不過,有些組織(如 Let's Encrypt)提供免費的憑證,以推動網路安全發展。
需要注意的是,申請及安裝數位憑證需要具備一定的技術知識,並且必須妥善保管你的私密金鑰,因為一旦私密金鑰被他人取得,他們便能解密你的加密通信。
當你從 CA 獲得 SSL/TLS 憑證後,還需要將其安裝到伺服器上。這通常包括上傳憑證文件並修改伺服器的配置,讓伺服器能夠使用該憑證。這樣一來,當客戶端透過 HTTPS 連接到你的網站時,伺服器就能提供憑證並建立安全連線。
SSL/TLS 憑證由憑證授權機構(Certificate Authorities,縮寫為 CAs)簽發。在全球範圍內,有許多知名的 CA 供你選擇,例如 DigiCert、GeoTrust、Thawte 等。
購買憑證的價格會根據憑證類型和選擇的 CA 而有所不同。較簡單的域名驗證(DV)憑證每年可能只需數十美元,而擴展驗證(EV)憑證則可能需要數百甚至數千美元。
近年來一些組織開始提供免費的 SSL/TLS 憑證,其中最著名的是 Let's Encrypt。Let's Encrypt 是一個非營利組織,致力於提升網路的安全性。他們提供免費的憑證,並且提供自動化工具來簡化安裝和管理流程,這對於個人用戶和小型網站來說非常方便。